import { SerialNoEntity } from './../model/clerkDataContext';
export class SerialNoMaker {
    static Current: SerialNoMaker = new SerialNoMaker();
    constructor() { }
    private serialNoList: SerialNoEntity[] = [];

    /**
     * 获得序列号
     * 没有传入域编号时表示新建一个域
     * @param  {number} domain? 序列号所在的域编号
     */
    public getNewSerialNo(domain?: number): SerialNoEntity {
        this.getSerialNoList();
        //从localStorage中获取保存的序列号数组
        let serialNoEntity = new SerialNoEntity();
        if (domain) {
            serialNoEntity.domain = domain;
            let domainParent = this.serialNoList.filter(item => {
                return item.domain == null && item.sernialNo == domain
            });
            //没有父节点，POS开的台桌，手动创建一个序列号父节点保存
            if(!domainParent || !domainParent.length) {
                let serialNoEntityParent = new SerialNoEntity();
                serialNoEntityParent.domain = null;
                serialNoEntityParent.sernialNo = domain;
                this.serialNoList.push(serialNoEntityParent);
            }
            let result = this.serialNoList.filter(item => item.domain == domain);
            if (result.length) {
                let last = result[result.length - 1];
                serialNoEntity.sernialNo = last.sernialNo ? Number(last.sernialNo) + 1 : 1;
            } else {
                serialNoEntity.sernialNo = 1;
            }
        } else {
            serialNoEntity.domain = null;
            if (this.serialNoList.length) {
                let temp = this.serialNoList.filter(x => { return x.domain == null });
                temp.sort((a, b) => { return a.sernialNo - b.sernialNo });
                serialNoEntity.sernialNo = Number(temp[temp.length - 1].sernialNo) + 1;
            } else {
                serialNoEntity.sernialNo = 1;
            }

        }
        this.serialNoList.push(serialNoEntity);
        this.saveSerialNo(this.serialNoList);
        return serialNoEntity;
    }

    clearSerialNoList() {
        localStorage.removeItem("serialnoList");
    }

    /**
     * 保存序列号到localStorage
     * @param  {SerialNoEntity[]} serialNoList 序列号数组
     */
    private saveSerialNo(serialNoList: SerialNoEntity[]) {
        if (serialNoList && serialNoList.length) {
            localStorage.setItem("serialnoList", JSON.stringify(serialNoList));
        }
    }

    /**
     * 获得序列号数组
     */
    private getSerialNoList() {
        let list = localStorage.getItem("serialnoList");
        if (list) {
            this.serialNoList = JSON.parse(list);
        }
    }
    /**
     * 转化Set集合为数组
     * @param  {} set 要转化的Set集合
     */
    private setToArray(set) {
        let index = -1;
        let result = Array(set.size);

        set.forEach(value => {
            result[++index] = value;
        });
        return result;
    }
}